package work模式

import (
	"fmt"
	"github.com/streadway/amqp"
)

func Pwork() {
	// 1. 尝试连接RabbitMQ，建立连接
	// 该连接抽象了套接字连接，并为我们处理协议版本协商和认证等
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	if err != nil {
		fmt.Println(err)
	}
	defer conn.Close()

	// 2. 接下来，我们创建一个通道，大多数API都是用过该通道操作的。
	ch, err := conn.Channel()
	if err != nil {
		fmt.Println(err)
	}
	defer ch.Close()

	// 3. 声明消息要发送到的队列
	//参数：
	//1.queue:队列名称
	//2.durable：是否持久化，当mq重启之后，还在
	//3.exclusive：参数有两个意思 a)是否独占即只能有一个消费者监听这个队列 b)当connection关闭时，是否删除队列
	//4.autoDelete：是否自动删除。当没有Consumer时，自动删除掉
	//5.argument：参数。配置如何删除
	//如果没有一个名字叫hello的队列，则会创建该队列，如果有则不会创建
	q, err := ch.QueueDeclare(
		"hello", // name
		false,   // durable
		false,   // delete when unused
		false,   // exclusive
		false,   // no-wait
		nil,     // arguments
	)
	if err != nil {
		fmt.Println(err)
	}

	body := "Hello rabbitMq~~!"
	// 4.将消息发布到声明的队列
	err = ch.Publish(
		"",     // exchange 交换机名称 简单模式下交换机会使用默认的""
		q.Name, // routing key 路由名称
		false,  // mandatory
		false,  // immediate
		amqp.Publishing{ //发送消息数据
			ContentType: "text/plain",
			Body:        []byte(body),
		})
}
